package lkx.demo.test3;

/**
 * 测试基本数据类型变量间的运算规则。
 *
 * 1. 这里提到可以做运算的基本数据类型有7种，不包含boolean类型。
 * 2. 运算规则包括：
 * 		① 自动类型提升
 * 		② 强制类型转换
 *
 * 3. 此VariableTest3.java用来测试自动类型提升
 *
 *
 * 规则：1. 当把存储范围小的值（常量值、变量的值、表达式计算的结果值）赋值给了存储范围大的变量时
 *
 *      2. 当容量小的变量与容量大的变量做运算时，结果自动转换为容量大的数据类型。
 *     byte 、short 、char ---> int  --->  long  ---> float ---> double
 *
 * 	特别的：byte、short、char类型的变量之间做运算，结果为int类型。
 *
 * 说明：此时的容量小或大，并非指占用的内存空间的大小，而是指表示数据的范围的大小。
 *      long(8字节) 、 float(4字节)
 *
 *
 * @author kunxianli
 * @date 2024/01/05 10:55
 **/
public class TestTypeConvert1 {

    public static void main(String[] args) {

//        当把存储范围小的值（常量值、变量的值、表达式计算的结果值）赋值给了存储范围大的变量时
        int a1 = 11;
        long b1 = a1;

        /*此时的容量小或大，并非指占用的内存空间的大小或者数据大小，而是指表示数据的范围的大小。
            这里 long(8字节) 、 float(4字节)，但是float能表示的数的范围大
         */
        float c1 = b1;
        System.out.println(c1);

//        当容量小的变量与容量大的变量做运算时，结果自动转换为容量大的数据类型。
        short a2 = 11;
        long b2 = 111;
        long c2 = a2+b2;
        System.out.println(c2);

//        byte 、short 、char 之间做运算 直接提升为 int
        byte d1 = 1;
        short d2 = 1;

//        short d3 = d1 + d2; // 编译不通过
        int d4 = d1 + d2;

        byte d5 = 1+2; // 编译通过



//        这里不加l，L不报错，原因也是自动类型提升
        long e1 = 123;
//        long e2 = 122222222222222222; // 编译不通过,122222222222222222理解为int类型，因为超出了int范围，所以报错。

//        float f1 = 12.5; // 编译不通过，12.5 是double类型

    }

}
